﻿//#include <iostream>
//#include <vector>
//using namespace std;
//
//#define N 8 //N皇后
//vector<int> putInf;//每一行
//vector<int> used(N, 0);//每一列
//vector<vector<int>> ans;//存储可行方案
//int curRow = 0;//当前待放皇后的行数
//
//bool judgeLegalPut(int& curRow, int col) 
//{//判断在curRow行的col列放置皇后是否合法
//	for (int i = curRow - 1; i >= 0; i--) {
//		//判断皇后是否成斜线
//		if (curRow - i == abs(col - putInf[i])) {
//			//当前位置与之前的皇后处于同一斜线上
//			return false;
//		}
//	}
//	return true;
//}
//
//void queensAssign(int curRow) {
//	if (curRow >= N) 
//	{	//收集结果
//		ans.push_back(putInf);
//		return;
//	}
//	for (int i = 0; i < N; ++i) {
//		//curRow行i列的位置
//		if (used[i])
//			continue;//位置被使用过
//		if (judgeLegalPut(curRow, i)) {
//			//当前位置置放与之前不冲突 将皇后加入
//			used[i] = true;
//			putInf.push_back(i);
//			queensAssign(curRow + 1);
//			used[i] = false;//撤销之前的状态
//			putInf.pop_back();
//		}
//	}
//}
//
//
//void printChessBoard(vector<int>& vec) {//输出模拟棋盘
//	cout << endl;
//	for (int i = 0; i < N; i++) {
//		for (int j = 0; j < N; j++) {
//			if (j != vec[i])
//				cout << ".";
//			else
//				cout << "Q";
//		}cout << endl;
//	}cout << endl;
//}
//
//int main() {
//	queensAssign(0);
//	int n = 1;
//	cout << N << "皇后问题,方案如下:\n" << endl;
//	for (vector<vector<int>>::iterator it = ans.begin(); it != ans.end(); it++) {
//		cout << "第" << n++ << "种放置方案：" << endl;
//		printChessBoard(*it);
//	}
//	return 0;
//}
